/*server.js*/
var net=require('net');
var users={};
var sessions = {};
var exp = {};
var UUID = require('uuid');
var $ = require('node-httpclient');
var url = 'http:// 120.27.21.149:9069/receiveTcp';
var tcp_server=net.createServer(

    function (conn) {
     conn.setEncoding('ascii');
     conn.setKeepAlive(true);
    //每连接一次 给创建连接session
     var sessionId =  UUID.v1();
     var sessioninfo = {
         'sessionId' :sessionId,    //唯一号
         'conn' : conn,             //tcp 连接通道
         'icNum' : null,            //唯一id  用来寻找tcp 通道
         'buffer':""               //每个用户对应一个缓冲流 , 当前缓冲流使用\r\n 解决分包 黏包问题
     };
     //将当前的连接存入  users 类
     users[sessionId]=sessioninfo;
      console.log('终端连接:',sessionId);
     //
     // console.log('当前的sessionid 的信息',users[sessionId].conn);
     //将当前的session 放在一个 users 里面
     // var conn =    users[sessionId].conn;
     // conn.write('nihaoya');

    conn.on('data',function (data) {
        var  buf_data = users[sessionId].buffer += data;
        console.log("当前:"+sessionId+"接受的数据为 : "+ buf_data);
        var target = '\r\n';
        var  endWith =  confirmEnding(buf_data, target);
        if (endWith){
            buf_data=buf_data.replace(/\r\n/,''); //去掉接受的 回车
            console.log("当前:"+sessionId+"接受的完整数据为 : "+ buf_data);
            users[sessionId].buffer = ""; //接受到完整数据 清空缓冲区
            //判断接收的是那种消息类型
            if (confirmbeginning(buf_data, 'DAT')){
                var splitData = buf_data.split(",");
                var ic_num = splitData[2];
                console.log("按照逗号分隔之后为:" , splitData)
                console.log("当前的ic_num :" , ic_num)
                //ic_num 放到当前的 users 中
                users[sessionId].icNum = ic_num;
                sessions[ic_num] = users[sessionId];
                var sendJson = {
                    'cmd':'DAT',
                    'icNum':users[sessionId].icNum,
                    'data':buf_data
                }
                console.log( sendJson)
                $.post( url,
                    sendJson,
                    function(data, status){
                    console.log(status);
                });
            }
            else if (confirmbeginning(buf_data, 'PAR')){
                var sendJson = {
                    'cmd':'PAR',
                    'icNum':users[sessionId].icNum,
                    'data':buf_data
                }
                console.log( sendJson)
                $.post( url,
                    sendJson,
                    function(data, status){
                        console.log(status);
                    });
            }
            else{
                var sendJson = {
                    'cmd':'PAR',
                    'icNum':users[sessionId].icNum,
                    'data':buf_data
                };
                console.log( sendJson)
                $.post( url,
                    sendJson,
                    function(data, status){
                        console.log(status);
                    });
            }
        }
        // data=data.replace(/\r\n/,'');

    });
    conn.on('close',function () {//这里防止连接出错，使用close而非end
        var ic_num = users[sessionId].icNum;
        console.log("断开连接" ,ic_num)
        delete users[sessionId];  //删除users 缓存
        delete sessions[ic_num];  //删除 sessions缓存
    });
    conn.on('error',function (err) {
        console.log('Error in connection:'+ err+'\n');
    });
});



/**
 * 判断字符串是否 是以制定的字符串结尾
 * @param str
 * @param target
 * @returns {boolean}
 */
function confirmEnding(str, target) {

    if(target === str.substr(-target.length)){
        return true;
    }else{
        return false;
    }
}


/**
 * 判断字符串是否 是以制定的字符串开始
 * @param str
 * @param target
 * @returns {boolean}
 */
function confirmbeginning(str, target) {

    if(target === str.substr(0,target.length)){
        console.log("begin with ",str.substr(0,target.length));
        return true;
    }else{
        return false;
    }

}

exp['tcp_server'] = tcp_server ;
exp['sessions'] = sessions ;
module.exports = exp;
// module.exports = users;
// module.exports = sessions;